package com.example.test.advice.第一章_java开发中常用的方法和准则.建议18_避免instanceof非预期结果;

import java.util.Date;

public class Client {

    public static void main(String[] args) {
        //String对象是否是Object实例
        boolean b1 = "String" instanceof Object;//返回true,String类型继承了Object类型
        //String对象是否是String的实例
        boolean b2 = new String() instanceof String;//返回true，一个类的对象当然是这个类的类型
        //Object对象是否是String实例
        boolean b3 = new Object() instanceof String;//返回false，Object类型不是String类型，编译通过是因为两者存在继承关系
        //拆箱类型是否是装箱类型的实例
        //boolean b4 = 'A' instanceof Character;//‘A’是基本类型不能进行instanceof判断，故此处编译错误
        //空对象是否是String的实例
        boolean b5 = null instanceof String ;//
        //类型转换后的空对象是否是String的实例
        boolean b6 = (String)null instanceof String;
        //Date对象是否是String的实例
        //boolean b7 = new Date() instanceof String;//编译错误Datel类型与String类型不存在继承或是实现关系
        //在泛型类型中判断String对象是否是Date的实例
        boolean b8 = new GenericClass<String>().isDateInstance("");//
    }
}

class GenericClass<T>{
    //判断是否是Date类型
    public boolean isDateInstance(T t){//泛型编译后会编程Object类型
        return t instanceof Date;
    }
}